package main

import "fmt"

/*
*
* # 代码解释
在 Go 中，`new` 和 `make` 都用于分配内存，但它们的使用场景和返回值类型不同：

1. **`new(T)`**：
  - `new` 用于分配内存并返回指向该内存的指针。
  - 对于切片（slice），`new([]T)` 返回的是一个指向空切片的指针，而不是初始化的切片。
  - 在你的代码中，`mySlice1 := new([]int)` 返回的是 `*[]int` 类型的指针，初始值为 `nil`。

2. **`make(T, size, capacity)`**：
  - `make` 专门用于创建切片、映射（map）和通道（channel），并返回其类型的实例。
  - 对于切片，`make([]T, length, capacity)` 创建一个具有指定长度和容量的切片。
  - `mySlice2 := make([]int, 0)` 创建了一个长度为 0 的空切片。
  - `mySlice3 := make([]int, 10)` 创建了一个长度为 10 的切片，所有元素初始化为 0。
  - `mySlice4 := make([]int, 10, 20)` 创建了一个长度为 10、容量为 20 的切片。
*/
func main() {
	mySlice1 := new([]int)
	mySlice2 := make([]int, 0)
	mySlice3 := make([]int, 10)
	mySlice4 := make([]int, 10, 20)
	fmt.Printf("muSlice1 %v\n", mySlice1) // 返回指针
	fmt.Printf("muSlice2 %v\n", mySlice2) // 返回空切片
	fmt.Printf("muSlice3 %v\n", mySlice3)
	fmt.Printf("muSlice4 %v\n", mySlice4)

}
